package vista.paneles;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import java.util.List;

@SuppressWarnings("serial")
public class PanelDosListas extends JPanel {
	
	private ListConModelo listDerecha;
	private ListConModelo listIzquierda;
	
	private JButton botonIzquierdaDerecha;
	private JButton botonDerechaIzquierda;
	
	public PanelDosListas(String titulo)
	{
		super();
		
		this.setBorder(BorderFactory.createTitledBorder(titulo));
		
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.rowWeights = new double[]{0.0, 0.0};
		gridBagLayout.rowHeights = new int[]{0, 0};
		this.setLayout(gridBagLayout);
		
		agregarListIzquierda();
		agregarListDerecha();
		agregarBotonIzquierdaDerecha();				
		agregarBotonDerechaIzquierda();
		escucharEventoBotonoIzquierdaDerecha();
		escucharEventoBotonoDerechaIzquierda();
	}

	public void agregarObjetosALista(List<?> objetos)
	{
		this.listIzquierda.agregarObjetos(objetos);
	}
	
	public List<?> getObjetosDeListaDerecha()
	{
		return this.listDerecha.getObjetos();
	}
	
	/* para dibujar */
	private void agregarBotonDerechaIzquierda() 
	{
		botonDerechaIzquierda = new JButton();
		botonDerechaIzquierda.setIcon(new ImageIcon(PanelDosListas.class.getResource("/vista/imagenes/flechaReverseBlue32.png")));

		GridBagConstraints gbc_button = new GridBagConstraints();
		gbc_button.insets = new Insets(0, 0, 0, 5);
		gbc_button.gridx = 1;
		gbc_button.gridy = 1;
		gbc_button.anchor = GridBagConstraints.CENTER;
		gbc_button.weighty = 1.0;

		this.add(botonDerechaIzquierda, gbc_button);
	}

	private void agregarBotonIzquierdaDerecha() 
	{
		botonIzquierdaDerecha = new JButton("");
		botonIzquierdaDerecha.setIcon(new ImageIcon(PanelDosListas.class.getResource("/vista/imagenes/flechaPlayBlue32.png")));

		GridBagConstraints gbc_button = new GridBagConstraints();
		gbc_button.insets = new Insets(0, 0, 5, 5);
		gbc_button.gridx = 1;
		gbc_button.gridy = 0;
		gbc_button.anchor = GridBagConstraints.CENTER;
		gbc_button.weighty = 1.0;
		
		this.add(botonIzquierdaDerecha, gbc_button);
	}

	private void agregarListDerecha()
	{
		listDerecha = new ListConModelo();

		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.gridheight = 2;
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.weightx = 1.0;
		gbc_scrollPane.weighty = 1.0;
		gbc_scrollPane.gridx = 2;
		gbc_scrollPane.gridy = 0;
		
		this.add(new JScrollPane(listDerecha), gbc_scrollPane);
	}

	private void agregarListIzquierda() 
	{
		listIzquierda = new ListConModelo();

		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.gridheight = 2;
		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.weightx = 1.0;
		gbc_scrollPane.weighty = 1.0;
		gbc_scrollPane.gridx = 0;
		gbc_scrollPane.gridy = 0;
				
		this.add(new JScrollPane(listIzquierda), gbc_scrollPane);
	}
	
	/* para los eventos */
	private void escucharEventoBotonoIzquierdaDerecha()
	{
		botonIzquierdaDerecha.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseClicked(MouseEvent e) 
		{
			Object objeto = listIzquierda.getObjetoSeleccionado();
			
			listDerecha.agregarObjeto(objeto);
			listIzquierda.quitarObejto();
		}
	});
	
	}

	private void escucharEventoBotonoDerechaIzquierda()
	{
		botonDerechaIzquierda.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseClicked(MouseEvent e) 
		{
			Object objeto = listDerecha.getObjetoSeleccionado();
			
			listIzquierda.agregarObjeto(objeto);
			listDerecha.quitarObejto();
		}
	});
	
	}
}